package swing;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.Vector;

import javax.swing.JOptionPane;

public class Seccion {
        
        private int numSeccion;
        //por la relacion de composicion
        public Profesor profesor;

		Vector <Estudiante> alumnos = new Vector <Estudiante>();   
       
		//setters y getters del atributo de la clase    
        public int getNumSeccion() {
                return numSeccion;
        }
        public void setNumSeccion(int numSeccion) {
                this.numSeccion = numSeccion;
        }
        
        public Vector<Estudiante> getAlumnos() {
			return alumnos;
		}
		public void setAlumnos(Vector<Estudiante> alumnos) {
			this.alumnos = alumnos;
		}

        //Métodos de la clase Sección

        //Asignar profesor
        public void asignarProfesor(Profesor profesor){
                this.profesor = profesor;
        }
        
        //Retornar el profesor
        public Profesor getProfesor() {
			return profesor;
		}
        
        //Inscribir un estudiante
        public void inscribirEstudiante(Estudiante estudiante){

              alumnos.add(estudiante);
        }


        //Retirar estudiantes
        public void retirarEstudiante(String cedula){
                int i = 0;
                boolean encontrado = false;
              if (alumnos.size() > 0){    
                  while(!encontrado && i<alumnos.size()) {  
                          if (alumnos.elementAt(i).getCedula().compareTo(cedula) == 0) //Verifica Si son Iguales las cedulas!
                          {
                                  encontrado = true;
                                  alumnos.remove(alumnos.elementAt(i));
                              System.out.println("Se retiró el estudiante satisfactoriamente");
                          }
                          i++;
                       } 
                  
                        if (encontrado == false)
                        System.out.println("No se puede retirar, Estudiante no inscrito");      
                }

        }// Fin del metodo
        
        
        //Buscar un estudiante por cedula para realizar la validacion de que no entre la misma cedula al vector
        public boolean buscar(String cedulaBuscada){
                for(int i = 0;i < alumnos.size();i++)
                   if(alumnos.elementAt(i).getCedula().compareTo(cedulaBuscada) == 0)
                	   return true;
                	return false;
               /* int i = 0;
                boolean encontrado = false;
              if (alumnos.size() > 0){    
                  while(!encontrado && i<alumnos.size()) {  
                          if (alumnos.elementAt(i).getCedula().compareTo(cedulaBuscada) == 0) //Verifica Si son Iguales las cedulas!
                          {
                                  encontrado = true;
                          }
                          i++;
                       } 

                }return encontrado;*/
        }      
        
        public Estudiante buscarEstudiante(String cedulaBuscada)
        {
        	Estudiante e = new Estudiante();
	
        	for(int i = 0;i < alumnos.size();i++)       
        		if (alumnos.elementAt(i).getCedula().compareTo(cedulaBuscada) == 0) //Verifica Si son Iguales las cedulas!
        			return alumnos.elementAt(i);
      
        	return e;
   } 
                
         //Aplicar evaluaciones
         public void aplicarEvaluaciones(){
            Estudiante alumno;
            if (alumnos.size() > 0){  
               for (int i=0;i< alumnos.size();i++)
               {
                 alumno = alumnos.elementAt(i);
                 alumno.PresentarEvaluacion();
                 profesor.evaluarAlumno(alumno); // este alumno entrará al metodo evaluar alumno
               }
               JOptionPane.showMessageDialog(null,"Evaluaciones Aplicadas Exitosamente:", "Aplicar Evaluaciones",JOptionPane.INFORMATION_MESSAGE);
            }
            else
            	JOptionPane.showMessageDialog(null,"No se puede aplicar Evaluaciones, No hay estudiantes inscritos", "Aplicar Evaluaciones",JOptionPane.INFORMATION_MESSAGE);
          }
        
         //imprime los datos del alumno
         public void imprimirAlumnos(){
                 int k=0;
                  while(k<alumnos.size())
                  {      
                  System.out.print("Cedula:");
                  System.out.println(alumnos.elementAt(k).getCedula());
                  System.out.print("Nombre:");
                  System.out.println(alumnos.elementAt(k).getNombre());
                  System.out.print("Apellido:");
                  System.out.println(alumnos.elementAt(k).getApellido());
                  System.out.print("Nota Final:");
                  System.out.println(alumnos.elementAt(k).getNotaFinal());
                  System.out.println("*****************************************");
                  System.out.println("                               ");
                  k++;
                  }
         }      
         
         //Lista de Estudiantes ordenados por cedula de identidad
         public void ordenarAlumnoCedula()
         {
                 if (alumnos.size() > 0)	 
                 Collections.sort(alumnos, new OrdenaCedula());
                 else
                 System.out.println("No hay estudiantes Inscritos en la seccion"); 
         }
                
        //Listar estudiantes ordenados por nota final
         public void ordenadosNotaFinal(){
                if(alumnos.size() > 0) 
            Collections.sort(alumnos, new OrdenarNota());
                else
            System.out.println("No hay estudiantes Inscritos en la seccion");
          
         }
            
        //Listar estudiantes aprobados   
        public void estudiantesAprobados(){
          int ctaprobados=0;
          System.out.println("Estudiantes Aprobados");
          if (alumnos.size() > 0){
             for(int i=0; i<alumnos.size(); i++){
                if (alumnos.elementAt(i).getEstatus() == ("Aprobado")){
                        
                	System.out.println("*******************************");
                    System.out.println("Cedula:");
                    System.out.println(alumnos.elementAt(i).getCedula());
                    System.out.println("Nombre:");
                    System.out.println(alumnos.elementAt(i).getNombre());
                    System.out.println("Apellido:");
                    System.out.println(alumnos.elementAt(i).getApellido());
                    System.out.println("Nota Final:");
                    System.out.println(alumnos.elementAt(i).getNotaFinal());   
                    ctaprobados=ctaprobados+1;}
                }    
  
             if (ctaprobados==0)
             System.out.println("No hay Estudiantes Aprobados");
          }
          else System.out.println("No hay estudiantes Inscritos en la seccion");
        }       
           
    //Listar estudiantes aplazados.
     public void estudiantesAplazados(){
     int ctreprobados=0;
       System.out.println("Estudiantes Reprobados:");
            if (alumnos.size() > 0){
               for(int i=0; i<alumnos.size(); i++){
                   if (alumnos.elementAt(i).getEstatus() == ("Reprobado")){
                              
                	 System.out.println("*******************************");
                     System.out.println("Cedula:");
                     System.out.println(alumnos.elementAt(i).getCedula());
                     System.out.println("Nombre:");
                     System.out.println(alumnos.elementAt(i).getNombre());
                     System.out.println("Apellido:");
                     System.out.println(alumnos.elementAt(i).getApellido());
                     System.out.println("Nota Final:");
                     System.out.println(alumnos.elementAt(i).getNotaFinal());   
                     ctreprobados=ctreprobados+1;}
                   }
                   
                     if (ctreprobados==0){
                     System.out.println("No hay Estudiantes Reprobados");
               }
            }
            else
            System.out.println("No hay estudiantes Inscritos en la seccion");     
        }
                
        //Mostar promedio de notas
        public float promedioNotas(){
          float acumulador = 0;
          float promedioFinal = 0;
                        
           if (alumnos.size() > 0){
                  for(int i=0; i<alumnos.size(); i++){
                        acumulador = acumulador + alumnos.elementAt(i).getNotaFinal();
                  }
                  promedioFinal = (acumulador/alumnos.size());
           return promedioFinal;
           }
           else
           return 0;
        }
                
        //imprimir en archivo de texto
        public void imprimirArchivo(String nombrearchivo){
               try {
                
                       FileWriter fw;
                                
                       fw = new FileWriter(nombrearchivo,true);
                        
                       BufferedWriter bw=  new BufferedWriter(fw);
                       PrintWriter salida = new PrintWriter(bw);
                        
                          int i=0;
                          while(i<alumnos.size())
                          {         
                             salida.print("Cedula del Alumno:");
                             salida.println (alumnos.elementAt(i).getCedula());
                             salida.print("Nombre:");
                             salida.println (alumnos.elementAt(i).getNombre());
                             salida.print("Apellido:");
                             salida.println (alumnos.elementAt(i).getApellido());
                             salida.print("Nota Final:");
                             salida.println(alumnos.elementAt(i).getNotaFinal());
                             salida.println("********************************************");
                             i++;
                           }
                             salida.close();
                             bw = new BufferedWriter(new FileWriter(nombrearchivo,true));
                         
               } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
             }
        }

}